<?php

    class itTemplateIntelligencerTest extends itTestCase {
        
        /**
         * @test
         */
        public function testAddReturn() {
            $i = new itTemplateIntelligencer('Test');
            $t = new MockTemplate();
            $this->assertEquals($i, $i->addTemplate($t));
            $i = new itTemplateIntelligencer('Test2');
            $this->assertEquals($t, $i->addAndCreateTemplate($t));
        }
        
        /**
         * @test
         */
        public function testNullPriorities() {
            $i = new itTemplateIntelligencer('TestNullPriorities');
            $i->addTemplate(new MockTemplate1())->addTemplate(new MockTemplate2());
            $this->assertTrue($i->load('TemplateIntelligencerA'));
            $a = new TemplateIntelligencerA();
            $this->assertEquals('TemplateIntelligencerA1.php', $a->getFileName());
        }
        
        /**
         * @test
         */
        public function testFirstNullPriority() {
            $i = new itTemplateIntelligencer('TestNullPriorities');
            $i->addTemplate(new MockTemplate1())->addTemplate(new MockTemplate2(), 100);
            $this->assertTrue($i->load('TemplateIntelligencerB'));
            $a = new TemplateIntelligencerB();
            $this->assertEquals('TemplateIntelligencerB2.php', $a->getFileName());
        }
        
        /**
         * @test
         */
        public function testTwoNotNullPriorities() {
            $i = new itTemplateIntelligencer('TestNullPriorities');
            $i->addTemplate(new MockTemplate1(), 50)->addTemplate(new MockTemplate2(), 10);
            $this->assertTrue($i->load('TemplateIntelligencerC'));
            $a = new TemplateIntelligencerC();
            $this->assertEquals('TemplateIntelligencerC2.php', $a->getFileName());
        }
    }
    
    class MockTemplate extends itTemplate {
        public function getPath($className) {
            list($namespace, $class) = itUtil::getClassAndNS($className);
            return TEST_DATA.'/Individual/Intelligencer/Template/'.$class.'.php';
        }
    }
    
    class MockTemplate1 extends itTemplate {
        public function getPath($className) {
            list($namespace, $class) = itUtil::getClassAndNS($className);
            return TEST_DATA.'/Individual/Intelligencer/Template/'.$class.'1.php';
        }
    }
    
    class MockTemplate2 extends itTemplate {
        public function getPath($className) {
            list($namespace, $class) = itUtil::getClassAndNS($className);
            return TEST_DATA.'/Individual/Intelligencer/Template/'.$class.'2.php';
        }
    }
?>